iT邦幫忙

2021 iThome 鐵人賽

DAY 17
1
AI & Data

觀賞魚辨識的YOLO全餐系列 第 17

Day 17 - YOLO 相關概念說明

  • 分享至 

  • xImage
  •  

Day 17 - YOLO 相關概念說明

如果不說明一下 YOLO 的運作概念,對於如何調整 YOLO 參數將會是一籌莫展,所以今天就來說明一下影像辨識的基礎概念一直到 YOLO 的運作概念

人工智慧、機器學習與深度學習

影像識別其實是深度學習的一種應用,而深度學習是機器學習的一個子集,機器學習則是包含在人工智慧這個大範圍內。人工智慧當初的發想是希望透過計算機來取代人類的許多能力,可以包含五感,如視覺、聽覺、嗅覺、味覺和觸-壓覺五種感官的感知,在透過大腦的思考來進行判斷,廣義上可以這樣思考。而機器學習則勢將這樣的想法具體化成

  • 監督式學習:已經知道答案(標籤),然後透過演算法來訓練機器來學習如何從特徵中找出答案,因為知道答案,所以比較容易評估演算法的表現。
  • 非監督式學習:不知道答案,所以我們就透過演算法想辦法湊出答案,常見的作法就是聚類 (clustering)。
  • 強化學習:透過摸索、試誤,並根據環境的回饋,來找出最佳答案。

這些學習的目的都是為了讓機器可以協助人類進行判斷,進而找出最佳答案,那現在問題來了,什麼是答案?簡單來分,答案有兩種,比方說,明天會不會下雨,可以說 80% 會下雨,或是說會下雨,專業一點的說法是一種是離散,一種是類別。

以下以 BMI 的標準來想像所謂的機器學習,假設我們不知道 BMI 的公式,而我們的到這樣一張表格,體重狀況就是的答案(標籤)也就是我們要預測的目標,而 體重身高性別年紀,就是特徵,現在就是要透過這些特徵來找出第四筆資料應該是什麼內容?很明顯的,這就是一個監督式機器學習,而且是屬於類別形的判斷。機器學習的過程希望找出一個函數(模型),讓我們將體重身高性別年紀等特徵輸入進去後,可以得到一個結果,可能是就是正常、過重或過輕。

體重狀況 體重 身高 性別 年紀
正常 70 178 50
過重 77 165 40
過輕 45 170 30
60 168 50

於是就有人想出,那能不能把整個判斷式想成以下這個方程式,那問題就變得很簡單,就是只要找出權重值就好。

$h_w(x)=w_0 x_0 + w_1 x_1 + \dots + w_d x_d=\sum_{i=0}^{D} w_d x_d$
其中:

  • $x_0, x_1, \dots, x_d$為特徵,$D$為特徵的總數,以這個例子來說就是4
  • $w_0, w_1, \dots, w_d$為權重參數
  • $h_w(x)$代表判別式,用於根據傳入的特徵預測輸出結果
  • $x_0$稱為偏置項(intercept term/bias term),一般設置為1即可

面對上面這樣的問題,很明顯的我們需要做很多資料前處理的動作,比方說把男、女,轉換成數值,當然,輸出的結果(體重狀況)也應該是個數值。這就是一個很典型的機器學習的例子,找出特徵,處理標籤等等的,相信有很多人都可以發現,年紀似乎不是 BMI 計算的數值內容,性別也不是,這就是所謂特徵的相關性的問題,特徵與標籤相關性的問題,把所有搞機器學習的人搞瘋了,因為要進行機器學習之前必須先找出特徵,這導致很多機器學習的研究停滯不前了。後來,竟然有人想說,那是不是可以建立一個模型,讓這個模型自己找出資料的特徵,於是深度學習就出現了。透過一連串神奇的操作後,特徵就自己跑出來了,而常見的技術就是 CNN, DNN。

關鍵名詞解釋

訓練模型

卷積神經網路(Convolutional Neural Network, CNN):是 YOLO 應用的主要技術,透過 CNN 先找出符合的物體,之後再判斷哪一區域有符合的物體,且機率最高,即將該區域以方框標註。以下大致描述一下 CNN 的內容。

卷積神經網路由一個或多個卷積層 (Convolutional) 和頂端的全連通層 (full-connection)(對應經典的神經網路)組成,同時也包括關聯權重和池化層(pooling layer)。這一結構使得卷積神經網路能夠利用輸入資料的二維結構。與其他深度學習結構相比,卷積神經網路在圖像和語音辨識方面能夠給出更好的結果。下圖就是 YOLOv3 用來萃取特徵的 darknet-53 的 53 層 CNN 網路,其中的 Residual 指的是殘差層,主要是用來避免網路層數過多而造成的缺點。卷積神經網路(例如Alexnet、VGG網路)在網路的最後通常為 softmax 分類器。微調(fine-tuning)一般用來調整 softmax 分類器的分類數。例如原網路可以分類出 2 種圖像,需要增加 1 個新的分類從而使網路可以分類出3種圖像。微調可以留用之前訓練的大多數參數,從而達到快速訓練收斂的效果。例如保留各個卷積層,只重構卷積層後的全連接層與 softmax 層即可。

https://ithelp.ithome.com.tw/upload/images/20210917/20129510JOtyA7TLgT.png
圖 1、YOLOv3 的 darknet53

卷積層:是一組平行的特徵圖(feature map),它通過在輸入圖像上滑動不同的卷積核並執行一定的運算而組成。
池化層(Pooling):它實際上是一種非線性形式的降採樣。
激勵層:線性整流層(Rectified Linear Units layer, ReLU layer),主要可以增強判定函式和整個神經網路的非線性特性,而本身並不會改變卷積層。
完全連接層:最後,在經過幾個卷積和最大池化層之後,神經網路中的進階推理通過完全連接層來完成。

訓練過程

期 (epoch):1 個 epoch 等於使用訓練集中的全部樣本訓練一次。
批次尺寸 (batchsize):一次訓練的樣本數目。
細分 (subdivisions):一次批次可以細分成幾次放入記憶體內。
迭代 (iteration):一個 iteration 等於使用 batchsize 個樣本訓練一次;

epoch=(全部訓練樣本/batchsize)/iteration

舉個例子,訓練集有 1000 個樣本,batchsize = 10,那麼訓練完整個樣本集(1次epoch)需要:100 次iteration。

1 = (1000 / 10) / 100

而通常在調整參數時,batchsize 是可以被調整的,考量的基礎如下:

1.通過並行化提高記憶體利用率。
2.單次 epoch 的迭代次數減少,提高執行速度。
3.適當的 batchsize,可以使梯度下降方向準確度增加,訓練震動的幅度減小。

但明顯的是 batchsize 的大小是跟記憶體相關的。

成效評估

下圖是根據 YOLOv3 的論文中擷取出來的圖片,只能說這是給天才看的,我這個凡人實在無法想像,把關鍵線條畫在圖表的左邊是什麼意思,執行時間是負的嗎?因此,又找了一張圖,是 YOLOV4 的作者畫出來的,比較人性化了,可以發現 YOLOV3 速度是夠快,但精準度似乎有點差強人意,這是在 Nvidia V100 的 GPU 運算速度。現在我們需要理解的就是,何謂 mAP。

https://ithelp.ithome.com.tw/upload/images/20210917/20129510UjwugoJoac.png
圖 2、YOLOV3與多種影像辨識模型在微軟的COCO資料集的效能表現

https://ithelp.ithome.com.tw/upload/images/20210917/2012951089K6ALLe8s.png
圖 3、多種影像辨識模型在微軟的COCO資料集的效能表現

預測結果可以細分為:

  • True:表示實際結果與預測結果一致(預測正確)。
  • False:表示實際結果和預測結果不一致(預測錯誤)。
  • Positive:表示預測為 1。
  • Negative:表示預測為 0。

上述各中情況將分別簡寫為:TP, FP, TN, FN。因此:

  • TP:模型預測結果為P(Positive, 1),實際結果為 1,預測正確 (True)。
  • FP:模型預測結果為P(Positive, 1),實際結果為 0,預測錯誤 (False)。
  • TN:模型預測結果為N(Negtive, 0),實際結果為 0,預測正確 (True)。
  • FN:模型預測結果為N(Negtive, 0),實際結果為 1,,預測錯誤 (False)。

根據上方情況,定義出以下的衡量指標:

  • 正確率:$Accuracy=\frac{#TP+#TN}{#TP+#FP+#TN+#FN}$
    • 體現了預測正確的樣本數佔總樣本數的比重
  • 精度:$Precision= \frac{#TP}{#TP+#FP}$
    • 體現了預測為目標物且實際上也確實為目標物的比例。Precision 有另一個名字稱作 Positive predictive value (PPV),它反映 「誤報」 程度:精度越高,誤報越小。
  • 查全率:$Recall = \frac{#TP}{#TP+#FN}$
    • 體現了:實際為目標物也確實被預測為目標物的比例,可以得知模型找出目標物的能力。Recall 也有另一個名字稱作 Sensitivity。它反映 「漏報」 程度:查全率越高,漏報越少
  • $F1 Score = \dfrac{2 PR}{P+R}$
    • 其中,P 為 Precision, R 為 Recall
    • 在針對 Validation Data 進行對比時,應選擇 F1 Score 最大的那個判別式來作為最優解

物體偵測除了要判斷影像中的所有物體各自屬於哪個類別之外,還要找出物體的位置。可想而知模型的好壞不能只單靠準確率來做判斷,因此我們需要其他評估方式來判定模型的物體偵測能力。
Intersection over Union (IoU)
$IoU = \dfrac{Area of Overlap}{Area of Union}$

IoU 的概念還滿簡單的,就是評估預測的方塊框 (bounding box) 與 真實的方塊框 (ground-truth bounding box) 是否重疊的指標。一般情況下,如果預測的方塊框被預測為確實有目標物存在,而且 IoU ≧ 0.5 (此 threshold 會依情況有所調整) 我們就認定此 bounding box 為 TP (True Positive),反之則為 FP (False Positive)。根據這個判斷可以算出 Precision 跟 recall,而 AP (Average Precision) 就是計算 Precision-recall curve 底下的面積。詳細的計算可以參考 mean Average Precision (mAP) — 評估物體偵測模型好壞的指標

https://ithelp.ithome.com.tw/upload/images/20210917/201295101XeNyAXCoj.png
圖 4、Average Precision的計算

mean Average Precision (mAP) 指的應該是當我們計算每一個類別的 AP 之後再作平均就會得到 mAP。以coco數據集來說,它有 80 個類別。

參考資料

  • 卷積神經網路,https://zh.wikipedia.org/wiki/卷積神經網路
  • (深度學習)ResNet之殘差學習,https://medium.com/@hupinwei/深度學習-resnet之殘差學習-f3ac36701b2f
  • 详解残差网络,https://zhuanlan.zhihu.com/p/42706477
  • Epoch, Batch size, Iteration, Learning Rate,https://medium.com/人工智慧-倒底有多智慧/epoch-batch-size-iteration-learning-rate-b62bf6334c49
  • 神經網路中Epoch、Iteration、Batchsize相關理解和說明,https://codertw.com/程式語言/557816/#outline__3
  • mean Average Precision (mAP) — 評估物體偵測模型好壞的指標,https://medium.com/curiosity-and-exploration/mean-average-precision-map-評估物體偵測模型好壞的指標-70a2d2872eb0
  • The Confusing Metrics of AP and mAP for Object Detection / Instance Segmentation,https://yanfengliux.medium.com/the-confusing-metrics-of-ap-and-map-for-object-detection-3113ba0386ef
  • YOLO v3 物件偵測~論文整理,YOLO v3 物件偵測~論文整理,https://medium.com/image-processing-and-ml-note/yolo-v3-物件偵測-論文整理-11ee909430c8
  • 目标检测|YOLOv2原理与实现(附YOLOv3),https://zhuanlan.zhihu.com/p/35325884
  • 目标检测|YOLO原理与实现,https://zhuanlan.zhihu.com/p/32525231

上一篇
Day 16 - 進行影像辨識訓練
下一篇
Day 18 - 深入討論 YOLO 相關設定
系列文
觀賞魚辨識的YOLO全餐38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言